package org.finesys.system.service;

import java.util.List;

import org.finesys.common.core.module.R;
import org.finesys.common.mp.core.service.BaseService;
import org.finesys.system.api.dto.SysUserDTO;
import org.finesys.system.api.dto.UserInfo;
import org.finesys.system.api.entity.SysUser;
import org.finesys.system.api.vo.UserExcelVO;
import org.finesys.system.api.vo.UserVO;
import org.springframework.validation.BindingResult;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

public interface SysUserService extends BaseService<SysUser> {

    /**
     * 获取用户的全部信息
     */
    UserInfo getUserInfo(SysUser sysUser);

    /**
     * 根据用户名获取用户
     */
    SysUser findByName(String userName);

    /**
     * 通过用户手机号查找用户信息
     */
    SysUser findByMobile(String mobile);

    /**
     * 通过用户员工号查找用户信息
     */
    SysUser findByUserSN(String userSN);

    /**
     * 删除用户
     */
    Boolean removeUserById(SysUser sysUser);

    /**
     * 批量删除用户
     */
    Boolean removeUsers(Long[] userIds);

    /**
     * 保存用户
     */
    Boolean saveUser(SysUserDTO sysUserDto);

    /**
     * 更新用户
     */
    Boolean updateUser(SysUserDTO sysUserDto);

    /**
     * 修改个人信息
     */
    Boolean updateUserInfo(SysUserDTO sysUserDto);

    /**
     * 分页查询用户信息
     */
    IPage<UserVO> getUserVOPage(Page<SysUserDTO> page, SysUserDTO userDTO);

    /**
     * 通过ID查询用户信息
     *
     * @param id 用户ID
     * @return 用户信息
     */
    UserVO selectUserVoById(Long id);

    /**
     * 修改密码
     *
     * @param userDto 用户信息
     * @return
     */
    R<?> changePassword(SysUserDTO userDto);

    /**
     * 校验密码
     *
     * @param password 密码明文
     * @return
     */
    R<?> checkPassword(String password);

    /**
     * 注册用户
     *
     * @param userDto 用户信息
     * @return success/false
     */
    R<Boolean> registerUser(SysUserDTO userDto);

    /**
     * 修改状态
     *
     * @param userDto 用户信息
     * @return
     */
    R<?> changeStatus(SysUserDTO userDto);

    /**
     * 导入用户
     */
    R<?> importUser(List<UserExcelVO> userExcelVOList, BindingResult bindingResult);

    /**
     * 导出用户方法
     */
    List<UserExcelVO> listUser(SysUserDTO sysUserDTO);
}
